package persistencia.carreras.ensambladores.general;

import modelo.geometria.Circunferencia;
import modelo.geometria.Figura;
import modelo.geometria.Vector;
import modelo.geometria.Rectangulo;
import persistencia.IProducto;

public abstract class Campos {	
	public static String identificador = "id";
	public static String prioridad = "prioridad";
	public static String x = "x";
	public static String y = "y";
	public static String ancho = "ancho";
	public static String largo = "largo";
	public static String radio = "radio";
	public static String vision = "vision";
	public static String senial = "senial";
	public static String color = "color";
	public static String velocidad = "velocidad";
	public static String deMaxima = "deMaxima";
	public static String vehiculo = "vehiculo";
	public static String figura = "figura";
	public static String cuerpo = "cuerpo";
	public static String esquina = "esquina";
	public static String cambioColor = "cambioColor";
	
	protected static ArmadorFiguras figuras = ArmadorFiguras.getInstancia();

	public static String prefijar(String prefijo) {
		if ((prefijo == null) || (prefijo.isEmpty()))
			return "";
		else
			return prefijo+".";
	}
	
	public static double leerDouble (IProducto p, String nombre) {
		String valor = p.obtenerIngrediente(nombre).getValor();
		return Double.valueOf(valor);
	}
	
	public static int leerInteger (IProducto p, String nombre) {
		String valor = p.obtenerIngrediente(nombre).getValor();
		return Integer.valueOf(valor);
	}

	public static int leerPrioridad(IProducto p, String prefijo) {
		return leerInteger(p,Campos.prefijar(prefijo)+Campos.prioridad);
	}
	
	public static boolean leerBoolean (IProducto p, String nombre) {
		String valor = p.obtenerIngrediente(nombre).getValor();
		return Boolean.valueOf(valor);
	}
	
	public static String leerString(IProducto p, String nombre) {
		return p.obtenerIngrediente(nombre).getValor();
	}
	
	//TODO convertir el codigo de senial en una entidad senial.
	public static String leerSenial(IProducto p, String prefijo) {
		String valor = leerString(p, Campos.prefijar(prefijo)+Campos.senial);
		return valor;
	}
	
	public static Vector leerPosicion(IProducto p, String prefijo) {
		Vector posicion = new Vector();
		
		posicion.setX( leerDouble(p, prefijar(prefijo)+Campos.x) );
		posicion.setY( leerDouble(p, prefijar(prefijo)+Campos.y) );
		
		return posicion;
	}
	
	public static Figura leerFigura(IProducto p, String campo) {
		return figuras.leerFigura(campo);
	}
	
	public static Circunferencia leerVision(IProducto p, String prefijo) {
		return leerCircunferencia(p, prefijar(prefijo)+Campos.vision);
	}
	
	public static Figura leerCuerpo(IProducto p, String prefijo) {
		String valor = p.obtenerIngrediente(prefijar(prefijo)+Campos.cuerpo).getValor();
		return figuras.leerFigura(valor);
	}
	
	public static Circunferencia leerCircunferencia(IProducto p, String campo) {
		String valor = p.obtenerIngrediente(campo).getValor();
		return EnsambladorCircunferencia.leerCircunferencia(valor);
	}

	public static Rectangulo leerRectangulo(IProducto p, String campo) {
		String valor = p.obtenerIngrediente(campo).getValor();
		return EnsambladorRectangulo.leerRectangulo(valor);
	}
}
